package cn.zwk.drawing.domain.execution.model;

import cn.zwk.drawing.domain.diagram.model.NodeCapability;
import lombok.Data;
import lombok.Builder;
import java.time.LocalDateTime;
import java.util.Map;

/**
 * 脚本执行请求
 */
@Data
@Builder
public class ExecutionRequest {
    
    /**
     * 执行ID
     */
    private String executionId;
    
    /**
     * 节点ID
     */
    private String nodeId;
    
    /**
     * 能力ID
     */
    private String capabilityId;
    
    /**
     * 执行参数
     */
    private Map<String, Object> parameters;
    
    /**
     * 超时时间（秒）
     */
    private Integer timeout;
    
    /**
     * 是否异步执行
     */
    private Boolean async;
    
    /**
     * 请求时间
     */
    private LocalDateTime requestedAt;
    
    /**
     * 请求来源
     */
    private String source;
    
    /**
     * 用户标识
     */
    private String userId;
    
    /**
     * 验证请求的有效性
     */
    public boolean isValid() {
        return nodeId != null && capabilityId != null &&
               timeout != null && timeout > 0 && timeout <= 300;
    }
    
    /**
     * 获取参数值
     */
    public Object getParameter(String key) {
        return parameters != null ? parameters.get(key) : null;
    }
    
    /**
     * 获取字符串参数
     */
    public String getStringParameter(String key, String defaultValue) {
        Object value = getParameter(key);
        return value != null ? value.toString() : defaultValue;
    }
}